// 1.引入对应模块
import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes.js'
//  2.注册路由模块
Vue.use(VueRouter)

// 在原型上修改push和replace方法，来彻底解决编程式导航的问题
const originPush = VueRouter.prototype.push //先将之前的方法存储到一个变量当中
const originReplace = VueRouter.prototype.push
// 修改VueRouter原型上的push方法，用于解决重复跳转时报错的问题
VueRouter.prototype.push = function (location, okCallBack, errCallBack) {
  if (okCallBack === undefined && errCallBack === undefined) {
    //如果上面的判断成立，执行以下代码的话，说明没有传递这两个参数，就要我们自己写了
    originPush.call(this, location).catch(() => {}) // 统一处理报错的问题 一劳永逸
  } else {
    //走到这里说明传了那两个参数，直接用传的就可以了
    originPush.call(this, location, okCallBack, errCallBack)
  }
}
// 修改VueRouter原型上的replace 用于解决重复跳转时报错的问题
VueRouter.prototype.replace = function (location, okCallBack, errCallBack) {
  if (okCallBack === undefined && errCallBack === undefined) {
    // 上面的判断成立的话，表示没有传递这两个参数
    originReplace.call(this, location).catch(() => {}) // 统一处理报错的问题 一劳永逸
  } else {
    originReplace.call(this, location, okCallBack, errCallBack)
  }
}

// 3.设置路由信息
const router = new VueRouter({
  mode: 'history',
  routes,
  scrollBehavior(to, from, savedPosition) {
    // console.log(to,from,savedPosition)
    // to 要跳转到哪个页面
    // from : 从哪个页面跳转过来
    // savedPosition: 保存之前页面的位置
    if (savedPosition) {
      return savedPosition
    } else {
      return { x: 0, y: 0 }
    }
  },
})
// 4.导出路由
export default router
